<?php 
/*Author: Deemon
 * TWImages
 * Обрезка и наложение водяного знака 
 * 
 */
function resize($sourceName,$newName,$w,$h,$wodaName=false,$returnimg=false)
{
	$fmt=false;
	$type=array('jpg' =>'jpeg','jpeg' =>'jpeg','gif'=>'gif','png'=>'png');
	
	if(file_exists($sourceName))//Проверка существования исходного файла
	{
		//Определяю тип файла
		$info=getimagesize($sourceName);
		if(!$info) die('Не поддерживаемый формат файла');
		preg_match('#/(\w+)$#',$info['mime'],$res);
		if($res)$fmt=$res[1];
		else die('Не поддерживаемый формат файла');
		
		// Создаю изображение... 
		$image = imagecreatetruecolor($w,$h) 
		or die('Не возможно создать изображение');     // ...или прерываю работу скрипта в случае ошибки 
		
		// Заливаю фон белым
		imagefill($image, 10, 10, 0xFFFFFF);
		
		//Взависимости от типа выбираю функцию
		$func='imagecreatefrom'.$type[$fmt];
		//Создаю изображение-донор
		$source = $func($sourceName)
		or die('Неправильный формат');

		//Выбираю масштаб изображения
		$procW=$info[0] / $w;
		$procH=$info[1] / $h;
		$procent=($procW > $procH)? $procW : $procH;
		
		//Массштабирую размеры 
		$massW=floor($info[0] / $procent);
		$massH=floor($info[1] / $procent);
		
		//Определяю координаты с учетом центрирования
		$x=floor(($w - $massW)/2);
		$y=floor(($h - $massH)/2);	
		
		
		// Копирую существующее изображение в новое с изменением размера:
		imagecopyresampled(
		$image,  // Идентификатор нового изображения
		$source,  // Идентификатор исходного изображения
		$x,$y,      // Координаты (x,y) верхнего левого угла в новом изображении
		0,0,      // Координаты (x,y) верхнего левого угла копируемого блока существующего изображения
		$massW,     // Новая ширина копируемого блока
		$massH,     // Новая высота копируемого блока
		$info[0], // Ширина исходного копируемого блока
		$info[1]  // Высота исходного копируемого блока
		);
		if($wodaName)//Если нужно наложить водяной значек
		{
			if(file_exists($wodaName))
			{
				//Определяю тип файла
				$info=getimagesize($wodaName);
				if(!$info) die('Не поддерживаемый формат файла');
				preg_match('#/(\w+)$#',$info['mime'],$res);
				if($res)$fmt=$res[1];
				else die('Не поддерживаемый формат файла');
				
				//Взависимости от типа выбираю функцию
				$func='imagecreatefrom'.$type[$fmt];
				//Создаю изображение водяного знака
				$woda = $func($wodaName)
				or die('Неправильный формат');

				if($w < $info[0] && $h < $info[1])
				{
					//Выбираю масштаб изображения
					$procW=$info[0] / $w;
					$procH=$info[1] / $h;
					$procent=($procW > $procH)? $procW : $procH;
					
					//Массштабирую размеры 
					$massW=floor($info[0] / $procent);
					$massH=floor($info[1] / $procent);
				}
				else
				{
					$massW=$info[0];
					$massH=$info[1];
				}
				//Определяю координаты с учетом центрирования
				$x=floor(($w - $massW)/2);
				$y=floor(($h - $massH)/2);	
				
				
				// Копирую существующее изображение в новое с изменением размера:
				imagecopyresampled(
				$image,  // Идентификатор нового изображения
				$woda,  // Идентификатор исходного изображения
				$x,$y,      // Координаты (x,y) верхнего левого угла в новом изображении
				0,0,      // Координаты (x,y) верхнего левого угла копируемого блока существующего изображения
				$massW,     // Новая ширина копируемого блока
				$massH,     // Новая высота копируемого блока
				$info[0], // Ширина исходного копируемого блока
				$info[1]  // Высота исходного копируемого блока
				);
				imagedestroy($woda);
			}
			else
				die('Файл водяного знака отсутствует');
		}
		
		//Взависимости от типа выбираем функцию
		//Сохраняю картинку
		preg_match('#\.(\w+)$#',$newName,$res);
		if($res)$fmt=$res[1];
		$func='image'.$type[$fmt];
		
		if($returnimg)//Если выдавать картинку 
		{
			//Обозначаю тип в хедере
			header('Content-type: image/' . $type[$fmt]);
			$func($image);
		}
		else
		{
			if($type[$fmt]=='jpeg')//Если сжатая картинка то качество 
				$func($image, $newName, 100);
			else
				$func($image, $newName);			
		}
		
		
		// Удаляю временные файлы
		imagedestroy($image);		
		imagedestroy($source);
	}
	else die('Отсутствует исходный файл');
	return true;
}
?>